// 第05节：POST请求如何接收（2） 如何处理post前端传过来的参数

const Koa=require('koa');
const App=new Koa();


App.use(async (ctx)=>{
    // GET请求
    if(ctx.url=='/'&&ctx.method=='GET'){
        let html=`
            <h1>Koa2 request post demo</h1>
            <form method="POST"  action="/">
                <p>userName</p>
                <input name="userName" /> <br/>
                <p>age</p>
                <input name="age" /> <br/>
                <p>webSite</p>
                <input name='webSite' /><br/>
                <button type="submit">submit</button>
            </form>
        `;
        ctx.body=html;

    }else if(ctx.url=='/'&&ctx.method=='POST'){
        // post请求处理
        ctx.body=await parsePostData(ctx);  //返回请求的参数
    }else{
        ctx.body='404未找到该页面'
    }
})

// 处理前端post传过来的参数

function parsePostData(ctx){
    return new Promise((resolve,reject)=>{
        try{
            let postdata='';
            ctx.req.on('data',(data)=>{  //在这里监听    拿post的参数拼接起来
                postdata+=data
            })
            // console.log(postdata,'拼接')
            ctx.req.addListener('end',function(){  //监听完成
                let parseData=parseQueryStr(postdata)
                // console.log(parseData,'完成')
                resolve(parseData)
            })
        }catch(error){
            reject(error)
        }
    })
}

// url参数获取函数，返回的是组装好的对象
// userName=acb&age=12&webSite=hello+world  处理成 { userName: 'acb', age: '12', webSite: 'hello+world' }
function parseQueryStr(queryStr){
    // console.log(queryStr)
    let queryData={};
    let queryStrList = queryStr.split('&');
    // console.log(queryStrList);
    for( let [index,queryStr] of queryStrList.entries() ){
        let itemList = queryStr.split('=');
        // console.log(itemList);
        queryData[itemList[0]] = decodeURIComponent(itemList[1]);
    } 
    return queryData
}


App.listen(3000,()=>{
    console.log('post请求的服务器已经启动')
})

